import axios from 'axios'
import store from 'src/vuex/index.js'
import {
  getCode
} from 'src/utils/getCode.js'
import {
  Storage
} from 'src/utils/storage.js'
import {
  MessageBox,
  Toast
} from 'mint-ui';

window._requests = 0; // 实时计算请求接口数，

export async function fetch(options) {
  window._requests++;
  let usrId = Storage.get("usrId", false);
  let accessToken = Storage.get("accessToken", false);
  let token = Storage.get("token", false);
  options = options || {};
  let verification = {
    'appId': '3585751FCCBF7574E266BF4AC5E14485',
    accessToken,
    usrId,
    token
  }
  let res
  try {
      // let item = {},sessionUrl={},sessionData={},saveTime = 1000;
      // // 添加请求拦截器
      // axios.interceptors.request.use(function (config) {
      //     if(config.method == 'post'){
      //         // 筛选在缓存时间内未过期请求 重新赋值缓存请求数组 新数组与当前请求url 匹配
      //         // 如果有相等项 则判断为重复提交的请求 直接return
      //         let nowTime =  new Date().getTime();
      //         if((item.setTime + saveTime) > nowTime){
      //             if(item.url === config.url){
      //                 sessionUrl = item.url
      //             }
      //             if(JSON.stringify(item.data) === JSON.stringify(config.data)){
      //                 sessionData = JSON.stringify(item.data)
      //             }
      //             if (sessionUrl.length > 0) {
      //               if(sessionData.length > 0){
      //                   // 请求重复
      //                   return;
      //               }
      //             }
      //         }
      //         item = { url: config.url,data:config.data,setTime: new Date().getTime() };
      //     }
      //     return config;
      // }, function (error) {
      // //     // 对请求错误做些什么
      //     return Promise.reject(error);
      // });
    res = await axios({
      headers: Object.assign({
        'X-Requested-With': 'XMLHttpRequest',
        'Access-Control-Allow-Origin': '*',
        "Access-Control-Allow-Methods": "POST,GET",
        'Access-Control-Allow-Credentials': true,
        'Access-Control-Expose-Headers': 'FooBar',
        'Content-Type': 'application/json;charset=UTF-8',
        'Accept': 'application/json'
      }, verification),
      timeout: 20000,
      url: options.url,
      method: options.method || 'get',
      params: options.params,
      data: options.data,
      dataType: 'json',
    })
    window._requests--;
  } catch (e) {
    window._requests--;
    if (e.request.status == 401) { // token 失效
      await MessageBox.alert('登录超时，请重新登录！')
      Storage.set("isLogin", false, true)
      getCode()
      return
    } else if (e.request.status == 500) {
      await MessageBox.alert('连接超时，请稍后重试')
    } else {
      Promise.reject(e)
    }
  } finally {
    if (window._requests === 0) {
      store.state.loading.loadingState = false;
      store.commit("WAIT_LOADING", !!window._requests);
    }
    return Promise.resolve(res.data)
  }
}

// */
export default {
  getAccessToken: function () {
    let params = {
      method: "get"
    };
    params.url = "/v1/token";
    params.params = {
      grantId: 'client',
      appId: '3585751FCCBF7574E266BF4AC5E14485', // 此为后台的appId 不是微信的appId
      appSecret: 'b1d15c9da94d748d46056297c1864234d178c4b1ad4a05941dd213aa37fa192e' // 此为后台的appSecret 不是微信的appSecret
    }
    return fetch(params);
  },
  /**
   * 获取签名
   */
  getSignature(data) {
    let params = {
      method: 'post',
      url: '/v3/web/usr/signature',
      data
    }
    return fetch(params);
  },
  getOpenid(code) {
    let params = {
      method: "post"
    };
    // params.url = '/v3/web/usr/authorize';
    params.url = '/v3/entrance/usr/authorize';
    params.data = {
      code
    }
    return fetch(params);
  },
  //
  merchantList() {
    return fetch({
      url: "/v2/list/mcht/query"
    })
  },
  /**
   *标签
   */
  tagList() {
    return fetch({
      url: "/v1/web/label/0"
    })
  },
  /**
   *手续费
   */
  fee() {
    return fetch({
      url: "/v1/web/fee/query"
    })
  },
  /**
   * 猜你喜欢
   */
  guessLike(data, userId) {
    let params = {};
    // params.url = '/v2/web/guess/'+userId;
    params.url = '/v2/web/guess/like/' + userId;
    params.method = 'post';
    params.data = data;
    return fetch(params);
  },
  /**
   *获取商户信息
   */
  mcht(params) {
    params = params || {};
    params.url = '/v2/web/mcht/' + params.mchtId + '?position=' + params.position;
    return fetch(params);
  },
  mchtNo(params) {
    params = params || {};
    params.url = '/v2/web/mcht/detail/' + params.mchtId;
    return fetch(params);
  },
  mchtNew(params) {
    params = params || {};
    params.url = '/v2/web/mcht/' + params.mchtId;
    return fetch(params);
  },
  /**
   * 餐饮分类
   */
  foodClass(params) {
    params = params || {};
    params.url = '/v2/web/dish/querycoupon';
    return fetch(params);
  },
  /**
   * 电子券(搜索)列表
   */
  couponList(params) {
    params.url = '/v2/web/coupon/query';
    return fetch(params);
  },
  /**
   * 商户(搜索)列表
   */
  merList(params) {
    params = params || {};
    params.url = '/v2/web/mcht/query';
    return fetch(params);
  },
  queryEightMcht(params) {
    params = params || {};
    params.url = '/v2/web/search/query_mcht';
    return fetch(params);
  },
  /**
   * 电子券详情
   */
  couponDetail(params) {
    params = params || {};
    params.url = '/v2/web/coupon/coupondetail/' + params.couponId + '?mchtId=' + params.mchtId;
    return fetch(params);
  },
  /**
   * 购买电子券
   */
  buyCoupon(params, userId) {
    params = params || {};
    params.url = '/v3/web/business/purchase/' + userId;
    return fetch(params);
  },
  /**
   *可换券列表
   */
  cardToCardChange(params, usrId) {
    params = params || {};
    params.url = '/v3/web/myCoupon/convertible/' + usrId;
    return fetch(params);
  },
  /**
   *券换券
   */
  changeCard(params, usrId) {
    params = params || {};
    params.url = '/v3/web/business/purchase/' + usrId;
    return fetch(params);
  },
  /**
   * 关于电子券评论
   */
  couponComments(params) {
    // params = params || {};
    params.url = '/v2/web/comment/querycoupon/' + params.couponId;
    return fetch(params);
  },

  /**
   * 不用
   */

  login({
          code,
          usrId,
          openId
        }) {

    let params = {}
    params.method = 'post';
    if (process.env.NODE_ENV === 'production') { //生产
      params.url = '/v3/entrance/usr/login'
      params.data = {
        code
      }
    } else {

      params.url = '/v3/entrance/usr/login/' + openId
      params.data = {
        usrId
      }

    }
    return fetch(params)
  },
  //线上登录
  loginPay({
             code
           }) {
    let params = {}
    params.method = 'post';
    if (process.env.NODE_ENV === 'production') { //生产
    }
    params.url = '/v3/entrance/usr/baseLogin'
    params.data = {
      code
    }
    return fetch(params)
  },
  /**
   * 修改用户信息
   */
  changeUserInfo(params, usrId) {
    params.url = '/v3/web/usr/usrInf/' + usrId;
    return fetch(params)
  },
  /**
   * 我的消息列表
   */
  myInfoList(params, usrId) {
    params.url = '/v3/web/myMsg/' + usrId;
    return fetch(params)
  },
  /**
   * 设为已读消息
   */
  msgRead(params, usrId) {
    params.url = '/v3/web/myMsg/msgRead/' + usrId;
    return fetch(params)
  },
  /**
   * 有无未读消息
   */
  hasMessage: function (params, usrId) {
    params.url = '/v3/web/myMsg/hasUnreadMsg/' + usrId;
    return fetch(params)
  },
  /**
   * 电子券消息 和 订单消息
   */
  myClassInfo(params, usrId) {
    params.url = '/v3/web/myMsg/msgs/' + usrId;
    return fetch(params)
  },
  /**
   * 我的券友列表
   */
  //     myFriend(params,usrId){
  //     params.url = '/v3/web/friend/friends/' + usrId;
  //     return fetch(params)
  // },
  /**
   * 我的待评价
   */
  pendingComt(params, usrId) {
    params.url = '/v2/web/comment/waitComment/' + usrId;
    return fetch(params)
  },
  /**
   * 评价
   */
  doComment(params, uId, orderId) {
    params.url = '/v2/web/comment/' + uId + '/' + orderId;
    // if (!file) {
    //     params.url = '/v2/web/comment/' + uId + '/'+ orderId;
    // }else{
    //    params.url = '/v2/web/comment/' + uId + '/'+ orderId+'?file='+file;
    // }
    return fetch(params)
  },
  /**
   * 我的电子券列表
   */
  myCoupons(params, usrId) {
    params.url = '/v2/web/coupon/my/' + usrId;
    return fetch(params)
  },
  /**
   * 电子券卖个小芸 计算价值
   */
  computePrice(params) {
    params.url = '/v2/web/coupon/calculate/' + params.couponId + '?mchtId=' + params.mchtId;
    return fetch(params)
  },
  /**
   * 出售电子券
   */
  sellCoupon(params, usrId) {
    params.url = '/v3/web/business/sell/' + usrId;
    return fetch(params)
  },
  /**
   * 撤销出售
   */
  recallOrder(params, usrId) {

    params.url = '/v2/web/coupon/' + usrId + '/' + params.seqNo;
    return fetch(params)
  },
  /**
   * 我的芸券
   */
  myAccount(params, usrId) {
    params.url = '/v3/web/wallet/' + usrId;
    return fetch(params)
  },
  /**
   * 我的收支明细
   */
  paymentList(params, usrId) {
    params.url = '/v3/web/wallet/' + usrId;
    return fetch(params)
  },
  /**
   * 我的钱包
   */
  myWallet(params, usrId) {
    console.log(usrId);
    params.url = '/v3/web/wallet/queryUser/' + usrId;
    return fetch(params)
  },
  /**
   * 我的钱包明细
   */
  myWalletList(params) { //这里暂用的是收支明细的接口
    params.url = '/v3/web/wallet/findWalletTxn';
    return fetch(params)
  },
  /**
   * 我的钱包明细：奖励金
   */
  myRewards(params) { //这里暂用的是收支明细的接口
    params.url = '/v3/web/wallet/findWalletDetails';
    params.data.queryType = 0
    // params.data = Object.assign(data, {
    //   queryType: '0', // 0全部All、1扫码SCAN、2分享SHARE、3使用USE
    //   walletAccType: 'U' // 钱包账号 用户钱包U开头 商户钱包M开头 +用户id或商户id S2代表商云
    // });
    return fetch(params)
  },
  /**
   * 我的评论列表
   */
  myComments(params, usrId) {
    params.url = '/v2/web/comment/myComment/' + usrId;
    return fetch(params)
  },
  /**
   * 我的电子券交易
   */
  couponDealList(params, usrId) {
    params.url = '/v3/web/txn/txnCous/' + usrId;
    return fetch(params)
  },
  /**
   * 我的订单
   */
  myOrder(params, usrId) {
    params.url = '/v2/web/order/orders/' + usrId;
    return fetch(params)
  },
  /**
   * 我的券友
   */
  myFriends(params, usrId) {
    params.url = '/v3/web/friend/friends/' + usrId;
    return fetch(params)
  },
  searchFriend: function (params) {
    params.url = '/v3/web/friend/qFriend'
    return fetch(params)
  },
  addFriend: function (params, usrId) {
    params.url = '/v3/web/friend/friendCheck/' + usrId;
    return fetch(params)
  },
  // 评论商户列表
  shopComments(params) {
    params.url = '/v2/web/comment/querymcht/' + params.mchtId;
    // params.data = {}
    return fetch(params);
  },
  // 个人评论商户全部列表
  shopCommentMyself(params) {
    params = params || {};
    params.url = '/v2/web/comment/queryUsrComments/'
    // params.data = {}
    return fetch(params);
  },
  //同意好友
  agreeFriend(params, usrId) {
    params.url = '/v3/web/friend/agreeFriend/' + usrId;
    return fetch(params);

  },
  //请求券友列表
  newFriend(params, usrId) {
    params.url = '/v3/web/friend/applyList/' + usrId;
    return fetch(params)
  },
  /**
   * 订单详情
   */
  getOrder: function (params) {
    params.url = '/v2/web/txn/fetchOrder';
    return fetch(params)
  },
  //推荐电子券
  recommendCoupon: function (params) {
    params.url = '/v2/web/coupon/recommendCoupon';
    return fetch(params);
  },
  //生成支付订单
  // payLink: function(params) {
  //   params.url = '/v2/web/txn/getPayUrl';
  //   return fetch(params);
  // },
  payLink: function (params) {
    params.url = '/v2/web/txn/billpay';
    return fetch(params);
  },
  payState: function (params) {
    params.url = '/v2/web/txn/changeOrderState';
    return fetch(params);
  },
  payBegin: function (params) {
    return fetch(params);
  },
  getCouponInfo: function (params) {
    params.method = 'post'
    params.url = '/v2/web/coupon/share';
    return fetch(params);
  },
  getBlock: function (params, currentPage = 1, perPage = 30) {
    params.data = {
      aoData: JSON.stringify([{
        name: "iDisplayStart",
        value: currentPage
      }, {
        name: "iDisplayLength",
        "value": perPage
      }])
    };
    params.url = '/v3/web/block/scrolling';
    return fetch(params);
  },
  //更新订单
  getEditOrder(params, usrId) {
    params.url = '/v2/web/txn/payedRequest/' + usrId;
    return fetch(params);
  },
  getBestCoupon(params, usrId) {
    params.url = '/v2/web/coupon/bestcoupon/' + usrId;
    return fetch(params);
  },
  //正扫订单可选券列表
  optionalCoupons(params) {
    params.url = '/v2/web/coupon/optionalCoupons'
    return fetch(params);
  },
  //正扫二维码创单支付
  positiveScanPay(params) {
    params.url = '/v2/web/txn/positiveScanPay/'
    return fetch(params);
  },
  getSite(position) {
    let params = {
      method: 'post',
      url: '/v2/web/map/convert',
      data: {
        position
      }
    }
    return fetch(params);
  },
  upAvatar(params) {
    params.url = '/v3/web/usr/updatepic';
    return fetch(params);
  },
  otherOK(params, usrId) {
    params.url = '/v3/web/mchtusr/authorize/' + usrId;
    return fetch(params);
  },
  // otherOK(usrId, ret, msgId) {
  //       var params = {
  //           method: "post"
  //       };
  //       params.url = '/v3/web/mchtusr/' + usrId + '/' + ret + '/' + msgId;
  //       return fetch(params);
  //   },

  //电子券数目
  countCoupon(params, usrId) {
    params = params || {};
    params.url = '/v2/web/coupon/countCoupon/noValidaty/' + usrId;
    return fetch(params);
  },
  //图片上传
  picUpload(params) {
    params = params || {};
    params.url = '/v1/web/feed/save'
    return fetch(params);
  },
  // 分享得芸券
  shareGetreward({
      params = {},
      openId
   }) {
    params = params || {};
    params.method = 'get'
    params.url = '/v2/web/scan/generateInviteQR/' + openId;
    return fetch(params);
  },
  // 验证电子券撤单
  validateCancel(params) {
    params = params || {};
    params.url = '/v2/web/coupon/checkcancel'
    return fetch(params);
  },

  //确认订单电子券详情
  firmOrder(params) {
    params = params || {};
    params.url = '/v2/web/coupon/coupondetail'
    return fetch(params);
  },
  //提交订单
  submitOrder(params) {
    params = params || {};
    params.url = '/v2/web/txn/create'
    return fetch(params)
  },
  //用户收货地址查询
  shippingAddress(params) {
    params = params || {};
    params.url = '/v3/web/address/query'
    return fetch(params);
  },
  //用户收货地址添加
  addRess(params) {
    params = params || {};
    params.url = '/v3/web/address/add'
    return fetch(params);
  },
  //用户收货地址更改
  changeRess(params) {
    params = params || {};
    params.url = '/v3/web/address/change'
    return fetch(params);
  },
  //收获查询
  getQueryOrder(params, usrId) {
    params = params || {};
    params.url = '/v3/web/txn/find/' + usrId;
    return fetch(params);
  },
  //确认收货
  makeSureOrder(params, usrId) {
    params = params || {};
    params.url = '/v3/web/txn/OrderReceipt/' + usrId;
    return fetch(params);
  },
  //   电子券券码查询
  findCode(params) {
    params = params || {};
    params.url = '/v3/web/myCoupon/couponNo'
    return fetch(params);
  },
  //券包每个按钮统计数量
  countCouponNum(params) {
    params = params || {};
    params.url = '/v2/web/coupon/countCouponNum'
    return fetch(params);
  },
  //购券查询
  buyQuery(params) {
    params = params || {};
    params.url = '/v2/web/buy/query/'
    return fetch(params);
  },
  //  购券购买
  buyCoupons(params) {
    params = params || {};
    params.url = '/v2/web/order/buyCoupons/'
    return fetch(params);
  },
  //第三方券券码核销
  ejectThird(params) {
    params = params || {};
    params.url = '/v3/web/myCoupon/ejectThird/'
    return fetch(params);
  },
  getThirdDesc(params) {
    params = params || {};
    params.url = '/v3/web/myCoupon/getThirdDesc/'
    return fetch(params);
  },
  findThirdDesc(params) {
    params = params || {};
    params.url = '/v3/web/myCoupon/findThirdDesc/'
    return fetch(params);
  },
  findThirdNo(params, couNo) {
    params.url = '/v3/web/myCoupon/findThirdNo/' + couNo
    return fetch(params);
  }
}
